/**
 * GTBarPlainButtonWithSortIcon.m
 *
 * The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
 * you may not use this file except in compliance with the License. You may obtain a copy of the License 
 * at http://www.mozilla.org/MPL/
 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND,
 * either express or implied. See the License for the specific language governing rights and limitations 
 * under the License.
 *
 * The Original Code is gcast-toolbox4iphone.
 *
 * The Initial Developers of the Original Code is Giannandrea Castaldi.
 */

// TO REIMPLEMENT USING GTBarBorderButtonWithActiveColor?

#import "GTBarPlainButtonWithSortIcon.h"
#import "UIImage+GTExtension.h"

@interface GTBarButtonWithUIPlainButton ()
@property(nonatomic,retain,readwrite) UIButton *button;
@property(nonatomic,retain,readwrite) UIColor *colorForSelected;
@end

@interface GTBarPlainButtonWithSortIcon ()
@property(nonatomic,retain,readwrite) UIImage *image;
@property(nonatomic,retain,readwrite) UIColor *colorForSelected;
- (UIImage*)composeButtonImage;
- (UIImage*)sortIcon;
- (void)sortingButtonPressed;
@end

@implementation GTBarPlainButtonWithSortIcon
@synthesize image;
@synthesize sortSelected;
@synthesize sortAscending;
@synthesize colorForSelected;

- (id)initWithImage:(UIImage*)anImage colorForSelected:(UIColor*)color {
  self.image = anImage;
  if ((self = [super initWithImage:[self composeButtonImage]])) {
    self.image = anImage;
    self.colorForSelected = color;
    [self.button addTarget:self action:@selector(sortingButtonPressed) forControlEvents:UIControlEventTouchUpInside];  
    [self deselect];
  }
  return self;
}

- (void)dealloc {
  [image release];
  [super dealloc];
}

- (void)selectWithSortAscending:(BOOL)ascending {
  sortSelected = TRUE;
  sortAscending = ascending;
  [self.button setImage:[self composeButtonImage] forState:UIControlStateNormal];
}

- (void)deselect {
  sortSelected = FALSE;
  sortAscending = TRUE;
  [self.button setImage:[self composeButtonImage] forState:UIControlStateNormal];
}

- (void)sortingButtonPressed {
  if (!sortSelected) {
    sortSelected = TRUE;
    sortAscending = TRUE;
  }
  else {
    sortAscending = !sortAscending;
  }
  [self.button setImage:[self composeButtonImage] forState:UIControlStateNormal];
  if ([super target] && [super action]) {
    [self.target performSelector:self.action withObject:self];
  }
}

- (UIImage*)composeButtonImage {
  UIImage *sortIcon = [self sortIcon];
  CGSize size = CGSizeMake(3 + sortIcon.size.width + self.image.size.width + 3, self.image.size.height);
  GTGraphicsBeginRetinaAwareImageContext(size);
  
  CGPoint sortIconPoint = CGPointMake(3, (self.image.size.height - sortIcon.size.height) / 2);
  [sortIcon drawAtPoint:sortIconPoint];
  
  CGPoint imagePoint = CGPointMake(3 + sortIcon.size.width, 0);
  [self.image drawAtPoint:imagePoint];
  
  UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  
  return sortSelected ? [result paintWithColor:self.colorForSelected] : result;
}

- (UIImage*)sortIcon {
  NSString *direction = sortAscending ? @"down" : @"up";
  NSString *imageToLoad = [NSString stringWithFormat:@"arrow-%@-white.png", direction];
  return [UIImage imageNamed:imageToLoad];
}

@end
